/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.hochschild.sgv.dao.impl;

import com.hochschild.sgv.domain.Usuario;
import com.hochschild.sgv.dao.UsuarioDao;
import com.hochschild.sgv.util.ConexionBDSeg;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class UsuarioDaoImpl implements UsuarioDao {

    public Usuario getUsuarioById(Usuario usuario) {
        Connection conn = null;
        ConexionBDSeg conexionBDSeg = null;
        PreparedStatement pstm = null;
        ResultSet rst = null;
        String SQL = null;
        Usuario bean = null;

        try {
            conexionBDSeg = new ConexionBDSeg();
            conn = conexionBDSeg.getConnection();
//            SQL = "SELECT * from puestoporusuario where idUsuario='" + usuario.getIdUsuario() + "'";
            SQL = "SELECT "
            + "[PuestoPorUsuario].[idPuesto],"
            + "[PuestoPorUsuario].[idUsuario],"
            + "[PuestoPorUsuario].[nombreUsuario],"
            + "[PuestoPorUsuario].[apellidoUsuario],"
            + "[PuestoPorUsuario].[correoUsuario],"
            + "[PuestoPorUsuario].[puestoUsuario],"
            + "[PuestoPorUsuario].[sociedadUsuario],"
            + "[PuestoPorUsuario].[divisionUsuario],"
            + "[PuestoPorUsuario].[subDivisionUsuario],"
            + "[PuestoPorUsuario].[areaUsuario],"
            + "[PuestoPorUsuario].[idPuestoJefeInmediato],"
            + "[PuestoPorUsuario].[idPersonal],"
            + "[PuestoPorUsuario].[saldoVacaciones],"
            + "[PuestoPorUsuario].[idGrupoPersonal],"
            + "[PuestoPorUsuario].[idAreaPersonal],"
            + "[PuestoPorUsuario_1].[idUsuario] as 'idUsuarioJefe'";
            
            SQL+= " from [dbo].[PuestoPorUsuario] [PuestoPorUsuario] inner join [dbo].[PuestoPorUsuario] [PuestoPorUsuario_1] on [PuestoPorUsuario].[idPuestoJefeInmediato] = [PuestoPorUsuario_1].[idPuesto] where [PuestoPorUsuario].[idUsuario]='" + usuario.getIdUsuario() + "'";
            System.out.println("sql: " + SQL);
            pstm = conn.prepareStatement(SQL);
            rst = pstm.executeQuery();

            if (rst.next()) {
                bean = new Usuario();
                bean.setIdPuesto(rst.getString("idPuesto"));
                bean.setIdUsuario(rst.getString("idUsuario"));
                bean.setNombreUsuario(rst.getString("nombreUsuario"));
                bean.setApellidoUsuario(rst.getString("apellidoUsuario"));
                bean.setCorreoUsuario(rst.getString("correoUsuario"));
                bean.setPuestoUsuario(rst.getString("puestoUsuario"));
                bean.setSociedadUsuario(rst.getString("sociedadUsuario"));
                bean.setDivisionUsuario(rst.getString("divisionUsuario"));
                bean.setSubdivision(rst.getString("subDivisionUsuario"));
                bean.setAreaUsuario(rst.getString("areaUsuario"));
                bean.setIdPuestoJefeInmediato(rst.getString("idPuestoJefeInmediato"));
                //System.out.println("-->" + rst.getString("idPuestoJefeInmediato"));
                bean.setIdPersonal(rst.getString("idPersonal"));
                bean.setSaldoVacaciones(rst.getInt("saldoVacaciones"));
                bean.setIdGrupoPersonal(rst.getString("idGrupoPersonal"));
                bean.setIdAreaPersonal(rst.getString("idAreaPersonal"));
                bean.setIdUsuarioJefe(rst.getString("IdUsuarioJefe"));
                System.out.println("Existe Usurio en puestoporusuario: " + bean.getIdUsuarioJefe() + " " + bean.getPuestoUsuario());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (pstm != null) {
                try {
                    pstm.close();
                } catch (SQLException ex) {
                    Logger.getLogger(UsuarioDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if (rst != null) {
                try {
                    rst.close();
                } catch (SQLException ex) {
                    Logger.getLogger(UsuarioDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) {
                    Logger.getLogger(UsuarioDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
        return bean;
    }

    public Usuario getUsuarioByIdPuesto(Usuario usuario) {
        Connection conn = null;
        ConexionBDSeg conexionBDSeg = null;
        PreparedStatement pstm = null;
        ResultSet rst = null;
        String SQL = null;
        Usuario bean = null;

        try {
            conexionBDSeg = new ConexionBDSeg();
            conn = conexionBDSeg.getConnection();
            SQL = "SELECT * from puestoporusuario where idPuesto='" + usuario.getIdPuesto() + "'";
            pstm = conn.prepareStatement(SQL);
            rst = pstm.executeQuery();

            if (rst.next()) {
                bean = new Usuario();
                bean.setIdPuesto(rst.getString("idPuesto"));
                bean.setIdUsuario(rst.getString("idUsuario"));
                bean.setNombreUsuario(rst.getString("nombreUsuario"));
                bean.setApellidoUsuario(rst.getString("apellidoUsuario"));
                bean.setCorreoUsuario(rst.getString("correoUsuario"));
                bean.setPuestoUsuario(rst.getString("puestoUsuario"));
                bean.setSociedadUsuario(rst.getString("sociedadUsuario"));
                bean.setDivisionUsuario(rst.getString("divisionUsuario"));
                bean.setAreaUsuario(rst.getString("areaUsuario"));
                bean.setIdPuestoJefeInmediato(rst.getString("idPuestoJefeInmediato"));
                bean.setIdPersonal(rst.getString("idPersonal"));
                bean.setSaldoVacaciones(rst.getInt("saldoVacaciones"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (pstm != null) {
                try {
                    pstm.close();
                } catch (SQLException ex) {
                    Logger.getLogger(UsuarioDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if (rst != null) {
                try {
                    rst.close();
                } catch (SQLException ex) {
                    Logger.getLogger(UsuarioDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) {
                    Logger.getLogger(UsuarioDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
        return bean;
    }

    public Integer getCantidad(Usuario usuario) {
        Connection conn = null;
        ConexionBDSeg conexionBDSeg = null;
        PreparedStatement pstm = null;
        ResultSet rst = null;
        String SQL = null;
        int cantidad = 0;

        try {
            conexionBDSeg = new ConexionBDSeg();
            conn = conexionBDSeg.getConnection();
            SQL = "SELECT count(*) from puestoporusuario where idPuestoJefeInmediato='" + usuario.getIdPuesto() + "'";
            pstm = conn.prepareStatement(SQL);
            rst = pstm.executeQuery();

            if (rst.next()) {
                cantidad = rst.getInt(1);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (pstm != null) {
                try {
                    pstm.close();
                } catch (SQLException ex) {
                    Logger.getLogger(UsuarioDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if (rst != null) {
                try {
                    rst.close();
                } catch (SQLException ex) {
                    Logger.getLogger(UsuarioDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException ex) {
                    Logger.getLogger(UsuarioDaoImpl.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
        return cantidad;
    }
}
